// 全局混入，包括uview-ui的vuex方案

import {
    mapState
} from 'vuex';
import store from "@/script/store.js";

// 尝试将用户的vuex的state变量，全部加载到全局变量中
let $uStoreKey = [];
try {
    $uStoreKey = store.state ? Object.keys(store.state) : [];
} catch (error) {

}

module.exports = {
    beforeCreate() {
        // 将vuex方法挂在到$u中
        // 使用方法为：如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
        // 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
        this.$u.vuex = (name, value) => {
            this.$store.commit('$uStore', {
                name,
                value
            });
        }
    },
    computed: {
        // 将vuex的state中的所有变量，解构到全局混入的mixin中
        ...mapState($uStoreKey)
    },
    async onLoad(option) {
        let pages = getCurrentPages();
        let route = pages[pages.length - 1].route;
        console.log('mixin-->onLoad[当前路由]:', route);
        // APP初始化
        this.appInit = await this.$appLaunch.catch((error) => {
            console.log('mixin-->onLoad[初始化错误]:', error);
            if (route != 'pages/error') {
                // 跳到错误页
                this.$u.route({
                    type: 'reLaunch',
                    url: 'pages/error',
                    params: {
                        message: error.message
                    }
                });
            }
            return false;
        });
        if (!this.appInit) {
            return false;
        }
		if (this.initPageFunc) {
            this.initPageFunc(option);
        }
    },
    data() {
        return {
            appInit: false,
            pageInit: false,
        }
    },
};
